package cn.tt.tuantuanerp.passport.service;


import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.dto.UserAddNewDTO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.dto.UserLoginDTO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.dto.UserUpdateDTO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserDetailsVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserListItemVO;
import javax.servlet.http.HttpServletRequest;

import java.util.List;

/**
 * 用户业务接口
 */

public interface IUserService {

    /**
     * 用户登录
     * @param userLoginDTO  用户登录相关信息
     * @return  生成的jwt
     */
    String login(UserLoginDTO userLoginDTO, HttpServletRequest request);

    /**
     * 根据手机验证码登录
     * @param userLoginDTO 用户登录相关信息
     * @return  生成的jwt
     */
    String loginByValidCode(UserLoginDTO userLoginDTO,HttpServletRequest request);

    /**
     * 用户退出
     */
    void logout();

    /**
     * 发送验证码
     * @param phone 手机号
     */
    void sendValidCode(String phone);

    /**
     * 新增用户信息
     * @param userAddNewDTO   用户信息
     */
    void addNew(UserAddNewDTO userAddNewDTO);

    /**
     * 通过id删除用户
     * @param id    用户id
     */
    void deleteById(Long id);

    /**
     * 获取用户列表
     * @return
     */
    List<UserListItemVO> list();

    /**
     * 根据用户名模糊查询用户列表
     * @param username 用户名
     * @return
     */
    List<UserListItemVO> listByUsername(String username);

    /**
     * 根据登录名模糊查询用户列表
     * @param loginName 登录名
     * @return
     */
    List<UserListItemVO> listByLoginName(String loginName);

    /**
     * 根据是否启用查询用户列表
     * @param enable 登录名
     * @return
     */
    List<UserListItemVO> listByEnable(Integer enable);

    /**
     * 根据用户id查询用户详情
     * @return 返回用户详细信息
     */
    UserDetailsVO getUserDetailsVOById(Long id);

    /**
     * 根据id查询密码(验证原密码)
     * @param id 用户id
     * @return
     */
    void validPassword(Long id,String password);

    /**
     * 根据id修改用户信息
     * @param userUpdateDTO 用户详细信息
     * @return
     */
    void updateById(Long id, UserUpdateDTO userUpdateDTO);

    /**
     * 启用用户
     * @param id 用户id
     */
    void setEnable(Long id);

    /**
     * 禁用用户
     * @param id 用户id
     */
    void setDisEnable(Long id);

    /**
     * 忘记密码
     * @param authentication    登录信息
     */
    void forgetPassword(String authentication);
}
